锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / 电商平台开发技术调研报告,主要由可扩展架构、前端、后台和测试等组成部分
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

电商平台开发技术调研报告

需求

需求汇总如下:

  • 组成部分:电商前台、电商后台、供应链管理、O2O平台和移动端。
  • 性能要求:前期产品种类不多,但是并发点击要求支持每秒50万次。
  • 地域要求:全网使用,长江以南以北都要支持。
  • 主机部署:使用阿里云服务器。

这样的需求在系统技术架构上要求有可扩展性,以支持业务规模增加后,并发量显著增长要求。

可扩展性架构

现在云计算技术成熟,可以以云计算平台来支持扩展。阿里云是国内成熟的平台。这里介绍下它的技术特点:
聚石塔是天猫和阿里云联合推出的以云计算为底层,为电商和各类电商服务商提供IT基础设施和数据服务的平台。这也是阿里的云计算技术在电子商务领域首次大规模的实战,有效的证明了云计算在应对电商业务挑战的能力。
云计算的核心价值之一是为客户解决了构建大规模分布式系统的难题。云计算的服务提供了足够大的计算能力和存储能力,任何客户都能10分钟之内获得10000个CPU core的计算能力,10P的存储能力,正是因为云计算产品在计算和存储方面的巨大能力,电商的软件系统才能在双11期间从容应对50倍的访问量增长。
云计算的核心价值之二是使得用户的整体成本大幅降低,客户不需要为峰值流量配备闲置的资源,随时可以释放掉不使用的资源。再加上阿里云是按照资源的实际使用来收取费用,大大降低了用户的整体成本。电商不再需要采购几十倍的服务器和带宽,只要在双11那天,临时调高云计算产品和服务的一些配置,过了双11再调下来,这样只需要为1天的峰值访问支付成本。
总的来说,就是阿里云云计算提供了足够大的计算能力和存储能力的同时,只按照实际使用的资源来收费,为电商在双11类似的促销活动中从容应对访问量的暴涨且费用低廉。
对于中小规模的互联网企业和电商企业而言,建设自己的IT系统,会是不小的成本。阿里云的云计算价值在于,可以提供统一的解决方案,让电商和更多中小企业在云计算平台上部署应用,通过阿里云的统一运维、云平台的安全机制来保障系统的稳定和安全。
如何使用阿里云云计算产品来构建电商系统
阿里云目前可以为电商提供完整的解决方案,目前的产品线分为两大类别:弹性计算和大规模存储。
弹性计算产品包括云服务器ECS、负载均衡服务SLB、云监控、云盾。ECS和SLB一起为用户提供了弹性的计算能力,云监控帮助客户更好的认识服务的运行状况,云盾是个安全产品,使得客户的服务更加安全。
大规模存储产品包括关系型数据库服务RDS、开放存储服务OSS、开放结构化存储服务OTS。RDS适合存储传统关系型数据,OSS适合存储key-value形式的数据,OTS适合存储海量的单表数据。
基于上述产品和服务,电商客户通常可以采取如下的方式构建自己的互联网服务,如下图所示:
说明: 架构图.jpg
1、SLB是对外的访问入口,提供了扩充计算能力的功能,通过设置虚拟IP,将位于同一数据中心的多台云服务器资源虚拟成一个高性能、高可用的应用服务池,再根据应用特性,将来自客户端的网络请求分发的云服务器池中,同时SLB还起到增强云服务器池抗攻击能力的作用。SLB是个调度者,它能够协调同组的服务器,协调的动作里最典型的是,找不忙碌的服务器来对新的点击请求应答,当然还有其它动作。
2、HTTP 应用服务集群基于SLB和ECS来构建,当流量增长迅速的时候,增加更多的ECS节点到SLB中即可,再大的流量也不怕。
3、经常需要更新的结构化数据存储在RDS中,RDS的底层使用ssd+fushionio的硬件设备,能应对5万级别的iops,轻松应对数据库的访问压力
4、不需要经常更新的图片、视频、文件等静态内容存储到OSS中,OSS提供了10PB级别的存储能力,无需担心数据量的增长。
5、RDS,OSS,SLB的最大网络带宽可以达到几百Gbps,ECS的网络带宽也可以在管理控制台动态的调整,网络带宽不够用的情况可以迅速解决。

电商后台技术架构

基于J2EE的应用开发架构

J2EE是Sun公司所颁布的标准,但已广为工业界所接受,J2EE的出现标志着用Java开发企业级应用系统已变得非常成熟。

J2EE体系架构

体系结构

如图所示,J2EE是多层的分布式体系结构,使系统的操作和运行具有很好的灵活性。先进的 Java计算方案如面向对象、独立于平台、快速集成、代码重用等,是实现这种结构的关键,并使系统具有良好的可移植性和可扩展性。
J2EE并不限制系统采用浏览器/服务器结构或客户机/服务器结构。如果客户端是浏览器,则界面设计可以采用JSP/Servlet技术。JSP技术支持可重用的基于构件的设计,并可以与任何Web服务器或应用服务器工作。Servlet是HTTP服务器的扩展API,它提供了很强的安全策略支持,可以用来访问数据库,并动态产生查询结果页面返回给浏览器。JSP/Servlet简化了开发基于Web应用的过程,从而使得基于Java计算内核的应用程序的开发和调试变得非常容易。
J2EE还提供了多种形式的分布式对象计算环境,客户端与服务器之间以及服务器之间可以通过RMI(Remote Method Invocation)、HTTP、IIOP(Internet InterORB Protocol)、JMS(Java Messaging Service)等多种协议进行消息和数据交换。Java RMI是为分布式的异质系统之间调用而设计的Java环境, RMI支持在不同的虚拟机上对象的无缝远程调用,很好地实现了对分布式的对象模型的支持,使得分布式应用的实现变得简单,并保证了安全性。系统还可以通过IIOP存取CORBA对象。
说明: ejb_img2

图2.2.3-2  EJB的开发使用模型
J2EE的技术特点

  • 集成了适合商务应用的EJB的Java平台,由于其简洁的结构和跨平台的特性,可以很好地支持快速开发和即时发布。
  • 使用Servlet,JSP和EJB作为可重用构件的应用结构使得容易集成和具有最大的生产能力。在开发、发布、管理和重用应用逻辑等方面具有很大的灵活性。
  • 基于工业标准保证数据交换的一致性和安全的安全网络架构,可以在应用和平台上达到高效的集成。

适于开发企业应用

  • 分布式环境——可以保证系统的稳定性,同时拥有较高的性能。
  • 面向对象的模块化组件设计——可以提高开发速度,降低开发成本。
  • 基于开放的标准——Java,XML,RMI,TCP/IP,JMS等协议、消息传递标准和中间件作为集成的方法。
  • 三层结构体系——最适合Internet、Intranet环境,可以使系统有很强的可扩展性和可管理性。
  • 以应用服务器为中心——低成本,安全和高性能。
  • 可扩展——允许透明地扩展以适应企业应用爆炸式的增长。
  • 基于J2EE的开发最大限度地利用现有的技术投资,采用Java技术-完全跨平台,适应Internet需要,并能得到大多数厂商支持,保护用户投资。

MVC

MVC模型概述
在传统的基于Web的应用业务里,例如ASP,CGI等,通常开发者将业务逻辑,数据逻辑、展示逻辑等混杂在一起,在同一个页面里既进行后台数据库的访问和操作,同时还包含业务流程和页面表示。这样编写出来的程序,既不利于程序员对业务代码的调试,同时也不利于编辑人员进行交互页面的设计。同时系统也不具备可扩展性,当我们要在现有业务上进行扩展的时候,通常无法借助于现有的资源和应用,而只能够重新编写,大大增加了投资,延长了系统上线的时间,失去了竞争市场的优势。
在电子化招标投标系统中,无论对外网站还是业务系统,都将采用通行的MVC模式来构建应用。这种结构解决了前面所述的问题,在我们的统一应用集成网络中,通过企业级高端J2EE应用服务器实现MVC开发模型。MVC的逻辑图如下:
电商3
2.2.3-3应用服务器之上采用MVC开发的逻辑示意图

说明: fig2
图2.2.3-4MVC数据流程图

技术特点和优势

  • Model(模型)层由EJB组件来实现,EJB将具体的业务封装在组件内部,具备安全、高性能、可重用等优秀的特征。
  • View(视图)层由JSP、HTML组成。这一层次的特点是能够真实地展示和客户交互的界面,具备可描绘的功能。同时能够嵌套动态数据,可以进行动态页面的展示。同时可以方便地进行客户端的个性化定制。根据每个客户的需求来展示不同风格的界面。
  • Controller(控制器)层是非常重要的一层,这一层是连接View和Model的纽带,同时也是将这两层进行最大限度分离的工具。通常由Servlet来实现,Servlet和JSP虽然同样都属于页面展示工具,但分属两层。主要在于JSP以脚本语言的形式存在,它的主要优势是进行动态数据的Web展示,而Servlet是一个完整的Java程序,进行业务的调用和流程的处理是它的长处。
  • 通过这种模型的建立,我们的应用系统具备了非常好的性能和可扩展性。将业务组件和展示页面进行分离,并通过Controller来描述调用关系,一方面可以提高效率,另一方面也可以增加系统扩充的能力,使我们的系统可以进行最快速度的业务扩展,在将来的市场中具备强大的竞争力。

电商前台技术

电商的主页都是以呈现为主,展示各个横向市场和纵向市场的入口,也可能会有一些个性化(所谓个性化,就是给不同的用户推荐不同的内容)的推荐。它不像交易、详情等页面,页面逻辑后端重而前端轻,后端需要做各种内容推荐、数据校验、类型判断等工作,而前端更多的是将后端的信息有序地呈现出来。
首页则不同,首页承载了大量的二级页面入口和一些频道的推荐内容,而这些数据更多的是由运营去维护,可以认为数据是死的,就算存在一些个性化的数据,也会使用 jsonp 的形式去加载,前端需要快速高效地处理这些数据,可见前端任务相当艰巨。加上作为一个网站的门面,它的安全稳定性也是极为重要的。
如果没有猜错,京东后端也有一个中间层,中间层负责组装数据,以模块为单位,根据前端的请求响应对应模块的内容,而数据是在另外一个运营平台上维护,运营填好的数据会即时的推送到 CDN 或者应用,中间层拼合数据。看不到的东西就不猜测了,我们来看看京东首页的整体结构。
前端技术简要分析
如果希望一个网站跑起来飞快,你觉得怎么做最靠谱?
我们都玩过微博,都上过手机淘宝,进入这些 app 应用,会发现很多页面几乎看不到加载的痕迹,因为他们是本地应用,很多图片、脚本、样式都已经打包在本地了,所以加载起来速度是很快的。如果希望一个网页也能飞奔起来,同样的道理,让请求的个数少一点,让请求的内容少一点。还有一个至关重要的,让那些次要的内容慢一点加载(我们称之为懒加载)。
前端缓存和异步加载
京东在按需加载和数据缓存上的工作做的十分到位。
京东 前端技术
每个具有 lazyload 异步标识的模块,都包含两个属性,一个是渲染该模块需要的内容(数据+JS),一个是这个内容过期的时间,只要内容不变就不会过期,所以这里使用的是文件 hash 来标注。
京东 前端技术
把需要请求的路径写在 dom 上,用户滚动时,一旦该模块进入了视窗,则请求 dom 上对应的 data-path 地址,拿到渲染这个模块所需要的脚本和数据,不过这中间还有一层本地缓存 localstorage,如果在本地缓存中匹配到了对应的 hash string 内容,则直接渲染,否则请求到数据之后更新本地缓存。dom 上的 data-time 会在页面加载时候,后端计算文件 hash,hash 不变则输出内容也不变。
这里其实存在两个请求,一个请求是加载数据和脚本,而这里的内容是:
为啥不在返回的内容中直接把脚本也输出出来?为了让数据充分缓存下了不少功夫。数据的变化频率比较高,如果数据和初始化脚本包装在一起,虽然节约了一个请求,但一旦数据变化,整个脚本都得重新加载,而将数据和脚本分离,脚本可以长期缓存在本地,单独请求数据,这个量会小很多。直接改变上面的 version 版本号便可以让浏览器重新请求最新脚本。
从上面可以看出,任何一个模块的改动,在前端只会引起一个较小的加载变化,加上 http 的缓存策略,服务器的压力也是很小的。
工程结构
比较常见的工程结构,如下:
.
├── build/
└── src/
├── widgets/
├── mods/
| ├── moduleA/
| | ├── index.js
| | ├── index.tpl
| | └── index.less
| ├── moduleB/
| └── moduleC/
├── index.js
├── index.tpl
└── index.less
所有 mods 中的 tpl 文件通过一些标签,引入到 src/index.tpl 中,需要同步渲染的模块信息直接引入,而异步渲染的模块内容,比如 moduleA/index.tpl,其内容就十分简单:
只引入一个模块钩子(hook),然后按需加载/懒加载这个模块钩子内容。相比 JD 采用的也是类似的模型。
横向技术对比
看看上面列出的目录结构,一般情况下,为了减少网页的请求数,我们会把所有 mods 和 wedgets 中的 js 和 css 分别打包成一个文件,然后前端 combo 请求,提前加载但是懒执行,这是 CMD 的思维方式。而京东使用了更懒的方式:懒加载并且懒执行。
这种方式带来的好处就是,单个模块的更改,前端只更新一小部分缓存;而提前加载所有模块的方式,任何一个模块有改动,整体都得重新下载。脚本懒加载的缺点是,需要发起请求,如果需要加载多个模块,则需要发起多个脚本请求,可以看到,快速拖动 JD 首页,模块的加载速度不容乐观。当然,脚本是可以被浏览器缓存的,这个问题也就是首次访问或者清空了缓存才会出现。
对请求控制如此严格,怎么就没考虑下优化源码当中的两大段 css 和 js 代码呢?是不是也可以把 css 和 js 放到 localstorage 中,减少请求数。
源码中通过函数去加载资源:
如果 localstorage 中不存在,也不需要重新发请求,后端脚本通过 cookie 判断是否需要同步输出代码:
如果发现 cookie 中的版本号与设定的版本号不一样,或者没有 cssV cookie,则同步内联输出 css 和 js。

供应链管理技术要求

需要实时消息组件支持,能实现即时通信功能,让异地的供应链信息能同步或可靠异步地传输到达。

ONS简介

开放消息服务ONS(Open Notification Service)是基于阿里开源消息中间件MetaQ(RocketMQ)打造的一款云消息产品,历经多次天猫双十一海量消息考验,在阿里巴巴内部有1000+个应用在使用,产品成熟稳定可靠, 是构建大型分布式系统的核心组件之一。它能为分布式应用系统提供异步解耦、削峰填谷能力,同时也具有海量消息堆积,高吞吐,可靠重试等互联网应用所需特性。
从2014年10月至今开始对外公测,目前ONS提供了北京,青岛,杭州三大Region的高可用集群(产品稳定性及可用性完全按照阿里巴巴内部标准来实施,无单点,99.99%的高可用性),公测期间完全免费。
目前支持Java,C++,.NET, PHP四种语言,Linux平台下支持C++,JAVA和PHP三种语言, Windows平台支持C++和.NET两种语言。

使用场景

ONS是从阿里MetaQ(RocketMQ)演化而来,MetaQ在阿里各个业务线得到了广泛的应用,业务场景如下:

  • Mysql binlog 同步
  • 订单类应用
  • 流计算
  • IM 等实时消息领域
  • Cache 同步
  • 双十一、双十二的削峰填谷

每天会有海量消息产生, 历经多次天猫双十一考验,稳定成熟可靠的消息产品。
同时, MetaQ 也是阿里的开源项目,开源版本名称为 RocketMQ
ONS 的主要特点

  • 无单点、无瓶颈、可自由扩展
  • 经历过三次双十一海量消息的考验,稳定性有保障

功能特性

使用ONS的功能图如下示例:
ons功能特性

  • 如图所示,ProducerID1的producer实例有三个,可能是部署在三个机器上的三个进程,也可能是一台机器上的三个进程。每个实例都会发送TopicA的消息。同理,ProducerID2与之类似。
  • ConsumerID1有三个实例,如果是集群消费方式,那么每个实例消费TopicA的1/3的消息,如果是广播消费方式,那么每个实例消费全量的消息。另外,TopicA也可以被另外的ConsumerId再次消费。

具体请参考
https://docs.aliyun.com/#/pub/ons/brief-manual/overview

网站性能测试平台

阿里云PTS
阿里云PTS,是阿里云面向全网用户免费开放的性能云测试平台,官方给它取了名字:Lite(PS:也不知道英文名字是怎么想出来的),主要是提供压测目标和监控集管理,包括提供简单易用的性能测试脚本模板模式和代码模式、测试场景配置、测试执行及执行数据实时展示,还有提供完善的性能结果报表和强大的性能分析图形展示。

锐英源优势

  • 在郑州威科姆从事过IPTV网络电视开发,该网络电视平台在国内多个省份使用,特别是党建平台,运行在全国范围内。在该平台开发过程中,威科姆和HP、SUN和Redhat等其它国际大公司有过合作。这些开发过程的锻炼,使锐英源孙老师对负载均衡、网络服务处理和网络通信开发有深入经验。
  • 在上个省级规模的教学管理系统开发中,研究和成功运用了阿里云存储技术。
  • 锐英源精通软件工程和文档处理
  • 锐英源孙老师做为近20年开发资深程序员,对业务逻辑剖析和处理有深入经验。
  • 锐英源对于复杂编程接口的处理有丰富经验。
友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内